<?php
class News_NCControlPanelController extends XPHP_Controller
{
    public function _init ()
    {
        //Load layout mặc định cho các action
        $this->loadLayout('ControlPanel/XAdmin');
    }
    #[Authorize(roles = 'Administrator')]
    public function indexAction ()
    {
        //Lấy ra danh sách các danh mục
        $model = new Areas_News_Models_NewsCategory();
        $categories = $model->getCategoryMultiLevel();
        $this->view->htmlCategoryMultiLevel = $this->_createHtmlCategoryMultiLevel(
        $categories);
        return $this->view();
    }
    #[Authorize(roles = 'Administrator')]
    public function indexPost ()
    {
        //Lưu sort của category
        $order = array();
        //List order category
        $list = $this->params['list'];
        foreach ($list as $id => $parent_id) {
            $model = new Areas_News_Models_NewsCategory($id);
            if (! isset($order[$parent_id])) {
                //Thứ tự
                $sort = $order[$parent_id] = 1;
            } else {
                //Tăng order lên 1
                $order[$parent_id] = $order[$parent_id] + 1;
                //Thứ tự
                $sort = $order[$parent_id];
            }
            $model->sort = $sort;
            //Nếu parent_id == root chuyển thành 0
            if ($parent_id == "root")
                $model->parent_id = 0;
            else
                $model->parent_id = $parent_id;
                 //Cập nhật
            $model->update();
        }
        return $this->json(
        array('success' => true, 
        'message' => 'Cập nhật thứ tự danh mục tin tức thành công'));
    }
    #[Authorize(roles = 'Administrator')]
    public function createAction ()
    {
        $model = new Areas_News_Models_NewsCategory();
        //Lấy ra danh sách danh mục theo dạng cây
        $categoryTree = $model->getCategoryTree();
        //Lấy ra mảng đưa vào hộp select
        $options = array();
        $options[0] = "Danh mục gốc";
        foreach ($categoryTree as $cat) {
            $options[$cat->id] = $cat->name;
        }
        //Assign sang view
        $this->view->categoryOptions = $options;
        return $this->view();
    }
    #[Authorize(roles = 'Administrator')]
    public function createPost (Areas_News_Models_NewsCategory $model)
    {
        if ($this->model->validate()) {
            //Kiểm tra xem danh mục đã tồn tại hay chưa
            if (! $this->model->exists(
            array('name' => $this->model->name))) {
            	$this->model->lang_id = $_SESSION['lang_id'];
                if ($this->model->insert())
                    return $this->json(
                    array('success' => true, 
                    'message' => 'Thêm danh mục tin tức thành công'));
                else
                    return $this->json(
                    array('success' => false, 
                    'message' => 'Xảy ra lỗi khi cố thêm danh mục mới vào hệ thống'));
            } else
                return $this->json(
                array('success' => false, 
                'message' => 'Tên danh mục này đã tồn tại trong hệ thống'));
        } else {
            return $this->json(
            array('success' => false, 
            'message' => 'Thông tin danh mục nhập vào chưa hợp lệ'));
        }
    }
    #[Authorize(roles = 'Administrator')]
    public function editAction ()
    {
        //Lấy ra danh mục tin tức cần sửa
        $model = new Areas_News_Models_NewsCategory($this->params[0]);
        //Lấy ra danh sách danh mục theo dạng cây
        $categoryTree = $model->getCategoryTree();
        //Lấy ra mảng đưa vào hộp select
        $options = array();
        $options[0] = "Danh mục gốc";
        foreach ($categoryTree as $cat) {
            $options[$cat->id] = $cat->name;
        }
        //Assign sang view
        $this->view->categoryOptions = $options;
        //Trả về view
        return $this->view($model);
    }
    #[Authorize(roles = 'Administrator')]
    public function editPost (Areas_News_Models_NewsCategory $model)
    {
        if ($this->model->validate()) {
            //Kiểm tra xem danh mục đã tồn tại hay chưa
            if (! $this->model->exists(
            array('name' => $this->model->name, 'id !=', $this->model->id))) {
                if ($this->model->update())
                    return $this->json(
                    array('success' => true, 
                    'message' => 'Cập nhật danh mục tin tức thành công'));
                else
                    return $this->json(
                    array('success' => false, 
                    'message' => 'Xảy ra lỗi khi cố cập nhật danh mục tin tức'));
            } else
                return $this->json(
                array('success' => false, 
                'message' => 'Tên danh mục này đã tồn tại trong hệ thống'));
        } else {
            return $this->json(
            array('success' => false, 
            'message' => 'Thông tin danh mục nhập vào chưa hợp lệ'));
        }
    }
    #[Authorize(roles = 'Administrator')]
    public function deletePost (Areas_News_Models_NewsCategory $model)
    {
        if ($this->model->delete())
            return $this->json(
            array('success' => true, 
            'message' => 'Xóa danh mục tin tức thành công'));
        else
            return $this->json(
            array('success' => false, 
            'message' => 'Xảy ra lỗi khi cố gắng xóa danh mục tin tức'));
    }
    /**
     * Lấy ra html hiển thị menu đa cấp
     * @param array $categories Category Multilevel
     */
    private function _createHtmlCategoryMultiLevel ($categories)
    {
        $html = "<ol class='sortable'>";
        foreach ($categories as $category) {
            $editUrl = $this->url->action("edit", array($category->id));
            $deleteUrl = $this->url->action("delete");
            $html .= "<li id='list_{$category->id}'>
            			<div class='title'><span>{$category->name}</span>
            				<div class='options'>
            					<a href='{$editUrl}' class='button ico-btn ico-text-edit tool-tip' title='{$category->name}' rel='edit'>
            					</a>
            					<a href='{$deleteUrl}' class='button ico-btn ico-text-trash tool-tip' item='{$category->name}' title='{$category->name}' 
            					data='{$category->id}' rel='delete'>
            					</a>
                            </div>
            			</div>";
            if (! empty($category->subs)) {
                $html .= $this->_recursiveCategoryMultiLevel($category->subs);
            }
        }
        $html .= "</ol>";
        return $html;
    }
    /**
     * Hàm đệ quy lấy ra danh mục đa cấp
     * @param array $categories Category Multilevel
     */
    private function _recursiveCategoryMultiLevel ($categories)
    {
        $html = "<ol>";
        foreach ($categories as $category) {
            $editUrl = $this->url->action("edit", array($category->id));
            $deleteUrl = $this->url->action("delete");
            $html .= "<li id='list_{$category->id}'>
            			<div class='title'><span>{$category->name}</span>
            				<div class='options'>
            					<a href='{$editUrl}' class='button ico-btn ico-text-edit tool-tip' title='{$category->name}' rel='edit'>
            					</a>
            					<a href='{$deleteUrl}' class='button ico-btn ico-text-trash tool-tip' item='{$category->name}' title='{$category->name}' 
            					data='{$category->id}' rel='delete'>
            					</a>
                            </div>
            			</div>";
            if (! empty($category->subs)) {
                $html .= $this->_recursiveCategoryMultiLevel($category->subs);
            }
        }
        $html .= "</ol>";
        return $html;
    }
}